[アップデート]Amazon VPC フローログの保存と分析が更に安く・効率的に実行できるようになりました
こんにちは!コンサル部のinomaso(@inomasosan)です。
今回は、Amazon VPCフローログ(以下、VPCフローログという)の保存と分析について、アップデートされた内容を紹介していきます。
概要
2021/10/13にVPCフローログはApache Parquet、Hive互換、時間別パーティション分割がサポートされるようになりました。
これにより、VPCフローログをS3保管時に、以下オプションが利用できるようになりました。
- Apache Parquetのログファイル形式
- Hive互換S3プレフィックス
- 1時間ごとにログをパーティション分割
詳細についてAWSビッグデータブログにまとまっています。
そもそもApache Parquetって何?
Apache Parquetは、データ処理フレームワーク、データモデル、プログラミング言語の選択に関係なく、Hadoopエコシステムのどのプロジェクトでも利用できる列挙型ストレージフォーマットです。
優れた圧縮率と効率的なエンコードにより、ファイルを高圧縮することができます。
ただし高圧縮にはある程度のファイルサイズが必要となります。
具体的なサイズについては、以下のブログが参考になりました。
何が嬉しいの?
追加されたオプションごとに見ていきましょう。
Apache Parquetのログファイル形式
元々、ログファイル形式はテキストのみでしたが、今回のアップデートでApache Parquetも追加されました。
VPCフローログはVPCのネットワークインターフェース間のトラフィック情報のため、サイズが肥大化しやすいです。
Apache Parquet形式であれば、ファイルの圧縮率向上によりS3のストレージコストを最大25%削減できます。
またAmazon Athena等の分析フレームワークで使用した場合、関連性のないデータがスキップされるためクエリの実行速度が速くなり、スキャンするデータ量も少なく済みます。
2022/7/1追記
弊社のちゃだいんからApache Parquet形式にするとS3のストレージコスト以外にも、S3への配信料金も安くなるのでは?という指摘がありました。
ユーザガイド:フローログの料金を確認したところ、VPCフローログの料金はログのデータ取り込みとアーカイブ(CloudWatch Logs or S3の保存料金)の2つの要素がありました。
フローログを CloudWatch Logs または Amazon S3 に発行すると、提供されたログに対するデータの取り込み料金とアーカイブ料金が適用されます。詳細と例については、「Amazon CloudWatch の料金」を参照してください。
VPCフローログはVended Logsと呼ばれる、AWSサービスがお客様に代わってネイティブに発行するログとなります。
東京リージョンでは以下のような料金表となっており、Apache Parquet形式にするとログデータの取り込み料金は最大約85%削減することが可能です。
2023/2/13追記
VPCフローログの料金を勘違いしていたことに気がつきました。VPCフローログをS3にApache Parquet形式で保管する場合はテキストよりも料金が高くなります。
詳細につきましては、以下のブログをご参照願います。
Hive互換S3プレフィックス
フローログをHive互換形式に指定できるようになりました。
これにより、AthenaでMSCK REPAIRコマンドを実行すれば、簡単にS3のパーティションをテーブルのパーティションへ追加することができます。
S3に保管したVPCフローログのサンプルパスは以下の通りです。
s3://my-flow-log-bucket/my-custom-flow-logs/AWSLogs/aws-account-id=123456789012/aws-service=vpcflowlogs/aws-region=us-east-1/year=2021/month=10/day=07/123456789012_vpcflowlogs_us-east-1_fl-06a0eeb1087d806aa_20211007T1930Z_d5ab7c14.log.parquet
1時間ごとにログをパーティション分割
時間ごとにパーティションを分割できるようになったため、特定の時間に対してクエリするとスキャンするデータ自体が少なくなるので、実行速度を早くなりコストも安くできます。
やってみた
1. Apache Parquet形式のVPCフローログ設定
AWSマネージメントコンソールでVPCのサービスを開き、特定のVPCにチェックを入れフローログを作成
をクリックします。
VPCフローログをApache Parquet形式でS3に保管するために設定していきます。
VPCの中にEC2等を作成し、先ほど設定したS3バケットにファイルが作成されていることを確認します。
2. Athenaセットアップ用のCloudFormationテンプレート生成
今回は簡単にAthenaをセットアップするためVPCフローログのAthena統合を利用します。
これにより、VPCフローログがパーティション化されたAthenaテーブルを自動的に作成するCloudFormationテンプレート生成することができます。
今回はAthenaで2021/10/20
のログのみ分析するCloudFormationテンプレートを生成します。
CloudFormationテンプレート用のS3バケットにファイルが作成されたことを確認します。
生成されたCloudFormationからスタックを作成するためにURLをコピー
をクリックします。
3. CloudFormation テンプレートからスタック作成
AWSマネージメントコンソールでCloudFormationのサービスを開き、スタックの作成から新しいリソースを使用(標準)
をクリックします。
テンプレートは作成済みのためAmazon S3 URL
に先程コピーしたURLを貼り付けます。
スタックの名前
に任意の値を入力します。
それ以外はデフォルト値でスタックを作成し、ステータスがCREATE_COMPLETE
になるまで待ちます。
4. AthenaでApache Parquet形式のVPCフローログを分析
AWSマネージメントコンソールでAthenaのサービスを開きます。
データベースやテーブルが自動セットアップされていることを確認します。
以下のようにAthenaクエリ結果用のS3が設定されていなかった場合は設定を表示
をクリックします。
クエリ結果用のS3を指定します。
Athenaのセットアップが全て完了したら、実際にVPCフローログを分析していきます。
今回は2021/10/20のレコードを100行抽出するクエリーを実行します。
SELECT * FROM fl0f4004c986ec94cf4none2021102020211020 WHERE year='2021' and month='10' and day='20' LIMIT 100
ステータスが完了
となり、クエリー結果が表示されたことを確認します。
既存のVPCフローログをApache Parquetに変更できるの?
変更できません。
新規に設定する必要があります。
参考URL
まとめ
Apache Parquetの特性を考慮すると、本番環境等で一定以上のネットワークトラフィックが発生するリソースがある場合に、今回のアップデートの恩恵を最も受けることができると思います。
この記事が、どなたかのお役に立てば幸いです。それでは!